package co.edu.uniquindio.dao;

import java.util.List;

import javax.ejb.LocalBean;
import javax.ejb.Stateless;
import javax.persistence.Query;

import co.edu.uniquindio.logica.Automovil;
import co.edu.uniquindio.logica.Marca;
import co.edu.uniquindio.logica.Modelo;
import co.edu.uniquindio.logica.Vendedor;

/**
 * Dao implementation class for Dao: MarcaDao
 * esta Dao me permite hacer todo el manejo con la BD
 * de la informacion concernientes a una marca de automovil
 * 
 * @author Andres Felipe Abril
 * @author Luis Enrique Robledo
 */
@Stateless
@LocalBean
public class MarcaDao extends Dao<Marca, String> {

	/**
	 * contructor por defecto de la clase MarcaDao 
	 */
    public MarcaDao() {
        // TODO Auto-generated constructor stub
    }

    /**
	 * Metodo para obtener la entidad de marca
	 * @return Entity de marca
	 */
	@Override
	protected Class<Marca> getEntityClass() {
		// TODO Auto-generated method stub
		return Marca.class;
	}
    /**
     * este metodo permite obtener una marca asociada a un automoivl
     * @return una marca
     */
	public Marca obtenerMarca(Automovil auto)
	{
		Query query = entityManager.createQuery("select modelo.marca from Modelo modelo, Automovil auto where auto= :auto and auto MEMBER OF modelo.automoviles" );
        query.setParameter("auto", auto);
        Marca marca=(Marca) query.getSingleResult();
        return marca;
	}
	/**
	 * este metodo permite obtener la lista de las marcas asociadas a un automovil
	 * @return una lista de marcas
	 */
	@SuppressWarnings("unchecked")
	public List<Marca> marcaAutomovil()
	{
		Query query = entityManager.createQuery("select modelo.marca from Modelo modelo where modelo.automoviles IS NOT EMPTY" );
        return query.getResultList();
	}
	/**
	 * este metodo me permite obtener una lista de marcas asociadas a un nombre
	 * @param el nombre de la marca
	 * @return una lista de marcas con el mismo nombre
	 * 
	 */
	@SuppressWarnings("unchecked")
	public List<Marca> buscarMporNombre(String nombre)
	{
		Query query = entityManager.createQuery("select marca from Marca marca where marca.nombre LIKE :nombre " );
		query.setParameter("nombre", nombre );
		return query.getResultList();

	}

}
